package com.zhn.usermanager.service.impl;

import com.zhn.usermanager.mapper.LoginMapper;
import com.zhn.usermanager.mapper.UserMapper;
import com.zhn.usermanager.pojo.User;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 手机号登录
 */
@Service
public class PhoneLoginServiceImpl {
    @Resource
    private LoginMapper loginMapper;
    @Resource
    private UserMapper userMapper;

    public Map<String, Object> phoneLogin(String phone, String phoneCode, HttpSession session){
        Map<String, Object> map = new HashMap<>();
        map.put("code", 601);
        map.put("msg", "验证码错误!");

//        System.out.println("loginMapper=" +loginMapper);
//        System.out.println("userMapper=" +userMapper);

        User return_user = loginMapper.phoneLogin(phone);     // 验证用户名是，已经返回了完整的用户信息数据，这里面包含了验证码发送时间
        if (return_user == null) {
            map.put("code", 601);
            map.put("msg", "此账户不存在!");
            return map;
        }
        long nowTime = System.currentTimeMillis();            // 获取当前时间的毫秒数
        long sendTime = return_user.getCodeTime().getTime();  // 得到验证码发送时间的毫秒数
        long cha = nowTime - sendTime;                        // 计算出两个时间毫秒数的差值

        // 判断差值是否与了1分钟   1 * 60 * 1000
        if(cha > 1 * 60 * 1000L) {     // 如果差值大于了1分钟，则直接返回错误提示
            map.put("code", 601);
            map.put("msg", "验证码已失效!");
            return map;
        }
        if(return_user != null && return_user.getPhoneCode().equals(phoneCode)) {
            map.put("code", 601);
            map.put("msg", "该账户未激活!");
            if (return_user.getAction() != 0){
                // 完成验证码比对之后，更新验证码为空字符串
                userMapper.updateByPhone( "","", phone);

                return_user.setLastlogintime(new Date());
                loginMapper.updateByUserName(return_user);

                map.put("code", 200);
                map.put("msg", "登录成功!");
                map.put("data", return_user);
                session.setAttribute("user", return_user);
            }
        }
        return map;
    }
}
